function plotPieChart(axis, result, textColor)
%PLOTPIECHART 绘制测试结果饼图
%   此函数在指定的坐标轴上绘制测试结果的饼图，显示通过、失败、禁用和未完成的测试数量分布。
%   使用预定义的颜色方案和图例来清晰展示测试状态。
%
%语法:
%   plotPieChart(axis, result, textColor)
%
%输入参数:
%   axis - 目标坐标轴对象，用于绘制饼图
%   result - 测试结果数组 [nPassed, nFailed, nDisabled, nIncomplete]
%            包含四个整数值，分别表示各种测试状态的数量
%   textColor - 文本颜色，用于图例显示（颜色向量或颜色名称）
%
%输出参数:
%   无（直接在指定坐标轴上绘制）
%
%说明:
%   - 自动处理零值情况，用小数值(0.0001)替代以确保饼图正常显示
%   - 使用固定的颜色方案：
%     * 通过: 绿色 [0.4660 0.6740 0.1880]
%     * 失败: 红色 [0.6350 0.0780 0.1840] 
%     * 禁用: 灰色 [0.65, 0.65, 0.65]
%     * 未完成: 橙色 [0.9290 0.6940 0.1250]
%   - 自动生成包含数量信息的图例标签
%   - 图例位置设为最佳位置，背景透明
%
%颜色方案:
%   该函数使用预定义的颜色映射来区分不同的测试状态，确保视觉上的一致性和可读性。
%
%示例:
%   % 创建测试结果数据
%   testResults = [85, 10, 3, 2]; % [通过, 失败, 禁用, 未完成]
%   
%   % 创建图形和坐标轴
%   fig = figure;
%   ax = axes(fig);
%   
%   % 绘制饼图
%   plotPieChart(ax, testResults, 'black');
%
%   % 在应用程序中使用
%   app = myTestApp; % 假设的应用程序对象
%   plotPieChart(app.TestResultsAxes, app.Results, 'white');
%
%依赖项:
%   pie - MATLAB饼图函数
%   legend - MATLAB图例函数
%   set - MATLAB属性设置函数
%
%参见:
%   pie, legend, axes
%

%版本: 1.0
%日期: 2024
%


% check compliant usage
total = sum(result);

axis.Visible = true;
labels = {['nPassed: ' num2str(result(1))],...
    ['nFailed: ' num2str(result(2))],...
    ['nDisabled: ' num2str(result(3))],...
    ['nIncomplete: ' num2str(result(4))]};

for i = 1:4
    if result(i) == 0
        result(i) = 0.0001;
    end
end
result = double(result);

hPieComponentHandles = pie(axis,result);
pieColorMap = [0.4660 0.6740 0.1880;
    0.6350 0.0780 0.1840;
    0.65,0.65,0.65;
    0.9290 0.6940 0.1250];

% if verLessThan('matlab','9.6') 
%     % matlab 2018b only support set color and labels of those non zero
%     % values.
%     nzIdx = find(result);
%     nloop = nnz(result);
%     for k = 1:nloop
%         set(hPieComponentHandles(k*2-1), 'FaceColor', pieColorMap(nzIdx(k),:));
%     end
%     labels = labels(nzIdx);
% else
    for k = 1:4
        set(hPieComponentHandles(k*2-1), 'FaceColor', pieColorMap(k,:));
    end
% end

lgd = legend(axis,labels,'Location','best',...
    'Color','none',...
    'Box','off',...
    'TextColor',textColor);

% legend('boxoff');

end